Skip to content

add mobench support to ProveKit v1#430

Open
dcbuild3r wants to merge 1489 commits into
v1from
dcbuild3r/mobench-v1-browserstack
Open

add mobench support to ProveKit v1#430
dcbuild3r wants to merge 1489 commits into
v1from
dcbuild3r/mobench-v1-browserstack

Conversation

@dcbuild3r
Copy link
Copy Markdown
Collaborator

@dcbuild3r dcbuild3r commented May 2, 2026

Summary

  • add v1 mobench BrowserStack wiring for passport age-check and OPRF prove benchmarks
  • run the same full Android/iOS triad matrix as PR add mobench support to ProveKit main #429
  • fix Android prove timing so fixture clone/setup is outside the measured prove span
  • use jemalloc as the Android fallback allocator under the native C FFI allocator
  • harden Android incomplete-fixture reporting with timeout/build/kill-evidence fields

Android mobench fix note

The earlier failing run was https://github.com/worldfnd/provekit/actions/runs/26002840796. The missing Vivo Y21 monolithic cell did not recover a BrowserStack session payload or summary.json; available artifacts only show the BrowserStack fetch timeout after 7200s for build b1ebace919a1b8cad3861313180ac9a18a7e461d. I grepped the recovered Android artifacts and job log for lowmemorykiller, Process * was killed, oom_reaper, SIGKILL, and abnormal signal text; there was no hit because BrowserStack did not return the killed session logs for that cell.

Before/failure memory from that run:

  • Vivo Y21 OPRF: 291 MB process peak, 9.614s
  • Vivo Y21 fragmented age check: 1206 MB process peak, 44.896s
  • Vivo Y21 monolithic age check: no row; BrowserStack timeout/no summary
  • S24 OPRF: 365 MB process peak, 2.216s

What changed:

  • Android and iOS now use the same semantic boundary for prove benches: per-iteration fixture setup happens before the measured closure, and profile_phase("prove") wraps only the prover entry point. Previously prepared.clone() ran inside profile_phase("prove"), so clone cost and peak memory were charged to proving.
  • Android native C FFI fallback allocation now routes through jemalloc instead of Bionic malloc when no host callback/mmap allocator is active.
  • If BrowserStack returns no summary, failure.json now records attempts, fetch timeout seconds, build id, and any LMK/OOM/SIGKILL lines recovered from attempt/device logs.

After numbers: pending the fresh BrowserStack rerun on this commit.

Validation

  • cargo fmt --all
  • cargo test -p bench-mobile --lib
  • cargo test -p bench-mobile --test examples_smoke
  • cargo test -p bench-mobile --test passport_smoke
  • cargo check -p provekit-ffi --target aarch64-linux-android with NDK 26.1 aarch64-linux-android34-clang
  • ruby -e 'require "yaml"; YAML.load_file(".github/workflows/mobile-bench-reusable.yml")'
  • git diff --check

Bisht13 and others added 30 commits February 21, 2026 01:13
Update whir dependency from PR 217 (ec295ced) to PR 225 (d67518d1)
which introduces an ownership-based prove() API with Cow parameters.

Adapt provekit to the new API: wrap vectors/witnesses/evaluations in
Cow::Owned, implement the new as_any() LinearForm requirement, and
replace the removed Domain type in gnark_config with
GeneralEvaluationDomain.

Fix a pre-existing bug in PrefixCovector::mle_evaluate that used the
wrong variable ordering for whir's big-endian MLE convention. The
leading point variables select upper/lower array halves, so the
(1-p) zero-padding factor must apply to point[..r] (head) with the
prefix MLE evaluated at point[r..] (tail), not the reverse.
…cross-evals, PrefixCovector tests

- Remove R1CSSolver trait, convert test_witness_satisfaction to free fn (#3)
- Make w2_layers compression conditional on has_challenges (#4)
- Parallelize cross-evaluation dot products with rayon::join (~12% prove speedup) (#6)
- Add debug_assert in PrefixCovector::accumulate (#11)
- Add PrefixCovector unit tests: size, mle_evaluate, accumulate, prefix=logical (#2)
- Fix clippy: &mut Vec -> &mut [] in solve_witness_vec
feat: port provekit to zkWHIR 2.0
feat: embed blinding polynomial G in w1 zero-padding
Optimizations: ROM Fusion, Spread Multiset Fusion & Constant Spread Path
Port to whir b3c86d7 with sound parameters
dcbuild3r added 30 commits May 18, 2026 11:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bench Run mobile benchmarks on PRs

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants